// 导入数据库连接
const db = require('../config/db');

/**
 * @description 将扁平菜单列表转换为树形结构
 * @param {Array} menus - 菜单列表
 * @returns {Array} - 树形菜单结构
 */
function buildMenuTree(menus) {
    const menuMap = {};
    const rootMenus = [];
    
    // 第一次遍历，创建所有菜单的映射
    menus.forEach(menu => {
        menu.children = [];
        menuMap[menu.id] = menu;
    });
    
    // 第二次遍历，构建树形结构
    menus.forEach(menu => {
        if (menu.parent_id === null || menu.parent_id === 0) {
            // 根菜单
            rootMenus.push(menu);
        } else if (menuMap[menu.parent_id]) {
            // 子菜单，添加到父菜单的children数组中
            menuMap[menu.parent_id].children.push(menu);
        }
    });
    
    return rootMenus;
}

/**
 * 根据当前登录用户角色获取菜单
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
async function getMenusByRole(req, res) {
  try {
    // 从req.user获取当前用户角色（由认证中间件设置）
    const userRole = req.user.role;
    
    if (!userRole) {
      return res.status(400).json({ message: '用户角色信息不存在' });
    }
    
    // 查询该角色可访问的菜单
    // 使用简化的查询，避免roles表连接（根据数据库结构调整）
    const [rows] = await db.execute(
      `SELECT m.* FROM menus m
       JOIN role_menu_permissions rmp ON m.id = rmp.menu_id
       WHERE rmp.role = ? AND m.status = 'active'
       ORDER BY m.parent_id, m.sort_order`,
      [userRole]
    );
    
    // 构建菜单树
    const menuTree = buildMenuTree(rows);
    
    res.status(200).json({
      message: '获取菜单成功',
      data: menuTree
    });
  } catch (error) {
    console.error('获取菜单失败:', error);
    res.status(500).json({ message: '服务器内部错误', error: error.message });
  }
}

// 导出函数
module.exports = { getMenusByRole, buildMenuTree };